home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
ACORNUSERS
/
CBSA
/
EDUCATION
/
SAVER
/
cc
/
WimpTask
< prev
Wrap
Text File
|
1997-12-20
|
4KB
|
164 lines
//-----------------------------------
// WimpTask.c
//-----------------------------------
#include <string.h>
#include <os.h>
#include <trap.h>
#include "WimpError.h"
#include "WimpTask.h"
WimpTask::WimpTask(char *info, int wimp_version, int *message_list)
{
int r[10];
os_error *e;
strncpy(taskname, info, 31);
taskname[31] = 0;
r[0] = wimp_version;
r[1] = 'T' +
('A' << 8) +
('S' << 16) +
('K' << 24);
r[2] = (int) taskname;
r[3] = (int) message_list;
if ((e = os_swi (Wimp_Initialise, r)) != NULL) throw(e);
handle = r[1];
FileSize = 0;
FileType = 0xfff;
FileName[0] = 0;
EnableEvent(ESEND);
EnableEvent(ESENDWANTACK);
}
WimpTask::~WimpTask()
{
int r[10];
r[0] = handle;
r[1] = 'T' +
('A' << 8) +
('S' << 16) +
('K' << 24);
os_swi(Wimp_CloseDown, r);
}
bool WimpTask::load(char *path, int a, int b)
{
return FALSE;
}
bool WimpTask::save(char *path, int &a)
{
a=0;
return FALSE;
}
bool WimpTask::receive()
{
int r[10];
os_error *e;
bool quit;
switch(User_Message.code)
{
case 0: // Quit.
return TRUE;
break;
case 2:
int size;
quit = save(User_Message.data_load_ack.pathname,size);
User_Message.your_ref = User_Message.my_ref;
User_Message.code = 3;
User_Message.size = size;
r[0] = (int) ESENDWANTACK;
r[1] = (int) &User_Message;
r[2] = User_Message.data_load_ack.dest_window;
r[3] = User_Message.data_load_ack.icon;
os_swi(Wimp_SendMessage, r);
return quit;
break;
case 3: // Load Event.
User_Message.your_ref = User_Message.my_ref;
User_Message.code = 4;
r[0] = (int) ESEND;
r[1] = (int) &User_Message;
r[2] = User_Message.task_sender;
os_swi(Wimp_SendMessage, r);
quit = load(User_Message.data_load_ack.pathname,
User_Message.data_load_ack.size,
User_Message.data_load_ack.type);
return quit;
break;
default:
return FALSE;
break;
}
}
bool WimpTask::UserDrag()
{
int r[10];
os_error *e;
r[0] = (int) &Mouse_Click;
e = os_swi(Wimp_GetPointerInfo, r);
User_Message.data_load_ack.dest_window = Mouse_Click.window;
User_Message.data_load_ack.icon = Mouse_Click.icon;
User_Message.data_load_ack.x = Mouse_Click.x;
User_Message.data_load_ack.y = Mouse_Click.y;
User_Message.data_load_ack.size = FileSize;
User_Message.data_load_ack.type = FileType;
strcpy(User_Message.data_load_ack.pathname,FileName);
User_Message.size = 64;
User_Message.your_ref = 0;
User_Message.code = 1; // DataSave
r[0] = 17;
r[1] = (int) &User_Message;
r[2] = User_Message.data_load_ack.dest_window; //Send to this window's creator
r[3] = User_Message.data_load_ack.icon; // Send to icon's task. only if r2=-2
e = os_swi(Wimp_SendMessage, r);
return FALSE;
}
void WimpTask::run()
{
int r[10];
os_error *e;
bool quit = 0;
while (!quit)
{
r[0] = mask_event;
r[1] = (int) block;
if ((e = os_swi(Wimp_Poll, r)) != NULL) throw (e);
switch (r[0])
{
case ENULL : quit = NullEvent(); break;
case EREDRAW : quit = RedrawWindow(); break;
case EOPEN: quit = OpenWindow(); break;
case ECLOSE: quit = CloseWindow(); break;
case EPTRLEAVE: quit = PointerLeave(); break;
case EPTRENTER: quit = PointerEnter(); break;
case EBUT: quit = ButtonPressed(); break;
case EUSERDRAG: quit = UserDrag(); break;
case EKEY: quit = KeyPressed(); break;
case EMENU: quit = MenuSelected(); break;
case ESCROLL: quit = Scrolled(); break;
case ELOSECARET: quit = LoseCaret(); break;
case EGAINCARET: quit = GainCaret(); break;
case EPOLLNONZERO: quit = PollNonZero(); break;
case ESEND: quit = receive(); break;
case ESENDWANTACK: quit = receive(); break;
case EACK: quit = Acknowledge(); break;
default: quit = FALSE; break;
}
}
}